/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package strategy.implementacao.acao;

import java.text.DecimalFormat;
import model.Jogador;
import servidorRMI.AddObservadorImp;
import servidorRMI.VerificaFalencia;
import strategy.interfaces.Acao;

/**
 *
 * @author Lucas
 */
public class PagarAluguelOuTaxa implements Acao {

    private Jogador jogador, dono;
    private double valor;

    @Override
    public void execute() {
        if (!(jogador.getName().equals(dono.getName()))) {
            DecimalFormat df = new DecimalFormat("0.00");

            if (jogador.getMoney() >= valor) {//Verifica se o jogador tem dinheiro para pagar...
                jogador.setMoney(jogador.getMoney() - valor);
                dono.setMoney(dono.getMoney() + valor);

                //Chama observadores...
                AddObservadorImp.getInstancia().notificarMensagem(jogador.getName(),
                        "TAXA:Voce pagou R$: "
                        + df.format(valor)
                        + " para "
                        + dono.getName() + "!");
                AddObservadorImp.getInstancia().notificarMensagem(dono.getName(),
                        "TAXA:Voce recebeu R$: "
                        + df.format(valor)
                        + " de "
                        + jogador.getName() + "!");
            } else {//Caso o jogador nao tenha mais money
                if (jogador.getListaCampos().isEmpty()) {//Caso o jogador não possua mais bens para vender
                    jogador.falido();
                    AddObservadorImp.getInstancia().notificarMensagem(jogador.getName(),
                            "Você está falido!");
                } else { //Verifica se o jogador possui bens e faz a venda para o banco
                    VerificaFalencia vf = new VerificaFalencia();
                    vf.setJogador(jogador);
                    if (vf.venderCompanias()) {
                        execute();
                    } else {
                        if (vf.venderTerrenos()) {
                            execute();
                        }
                    }
                }
            }
        } else { //Caso seja o mesmo dono que caiu no campo...
            AddObservadorImp.getInstancia().notificar();
        }
    }

    public void setJogador(Jogador jogador) {
        this.jogador = jogador;
    }

    public void setDono(Jogador dono) {
        this.dono = dono;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }
}
